//
//  BaseGeneralView.h
//  SleepApp
//
//  Created by chuangqi on 2021/4/6.
//  Copyright © 2021 RiceWang. All rights reserved.
//

#import <UIKit/UIKit.h>
@class BaseGeneralView;
#pragma 初始化参数
/** 视图默认弹出方式，主要用于content适配问题，看需求修改，默认Default */
typedef enum : NSUInteger {
    Base_General_Show_type_Default,
    Base_General_Show_type_Botton,
    Base_General_Show_type_BottonSafe,
    Base_General_Show_type_Top,
    Base_General_Show_type_Lift,
    Base_General_Show_type_Right,
} Base_General_Show_type;

#pragma 外部回调处理
//关闭回掉block 参数是操作后的回调，为空则代表是直接关闭
typedef void(^CloseBlock)(id data);

@protocol  BBaseGeneralViewDataSource<NSObject>
@optional
/**
 可选
 判断是否展示弹窗
 需要展示 则调用isShowBlock()回调
 默认展示
 */
-(void)isShowModelList:(NSArray<id> *)dataList isShowBlock:(void(^)(void))isShowBlock;
/**
 可选
 蒙层自定显示动画方式
 参考内部实现方式
 */
-(void)showMaskView:(UIView *)maskView;
/**
 可选
 自定显示动画方式
 参考内部实现方式
 */
-(void)showView:(BaseGeneralView *)view fromView:(UIView *)fromView;
/**
 可选
 自定关闭动画方式
 参考内部实现方式
 */
-(void)closeView:(BaseGeneralView *)view maskView:(UIView *)maskView;
/**
 可选
 初始化展示视图约束
 默认的大小为屏幕高度一半，底部贴合
 */
-(void)initViewMakeConstraints:(MASConstraintMaker *)make fromView:(UIView *)fromView;

/**
 可选
 是否需要处理点击确定后的操作逻辑
 点击确认按钮的 选中数据操作。
 需要子试图调用 defaultSureCloseViewData: 方法
 会回调 closeBlock_wl 的block块，内容为操作完毕后的内容
 默认回调 closeBlock_wl，无参数
 */
-(void)clickSelectCloseViewData:(id)data sureBlock:(void(^)(id data))sureBlock;
/**
 可选
 视图弹出方向
 */
-(Base_General_Show_type)showViewLocation;
@required
/**
 初始化视图
 */
-(void)initView;
/**
 初始化视图数据
 */
-(void)initData:(NSArray<id> *)dataList;
@end

@interface BaseGeneralView : UIView
/** 默认展示视图 区域 */
@property (nonatomic,strong) UIView *contentView;
#pragma mark -- 公开链式语法，
/** 初始化 */
+ (BaseGeneralView *(^)(void)) init_wl;
/** 蒙板透明度 */
- (BaseGeneralView *(^)(float alpha)) maskAlpha_wl;
/** 添加父级控制器 */
- (BaseGeneralView *(^)(UIViewController *rootViewController)) rootViewController_wl;
/** 添加数据 */
- (BaseGeneralView *(^)(id data)) addData_wl;
/** 添加关闭回调 */
- (BaseGeneralView *(^)(CloseBlock CloseBlock)) closeBlock_wl;
/** 弹出内容 */
- (BaseGeneralView *(^)(void)) show_wl;


#pragma mark -- 默认公开操作，给子视图公开的属性或者方法
/**
 可为空
 设置的弹出控制器，
 主要用于逻辑判断跳转
 */
@property (nonatomic,strong) UIViewController *rootViewController;
/**
 默认关闭视图
 */
- (void)defaultCloseView;
/**
 可选 绑定代理中的 clickSelectCloseViewData:block:方法
 子试图点击确定按钮存在逻辑处理时默认调用方法
 逻辑处理过程需实现 BBaseGeneralViewDataSource 代理中的 clickSelectCloseViewData:block:方法
 默认走 defaultCloseView 方法
 */
- (void)defaultSureCloseViewData:(id)data;

@end

